package com.sophossystems.client.asmon.dao.spring;

import java.sql.SQLException;
import java.util.List;

import org.apache.log4j.Logger;
import org.hibernate.Query;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.transform.Transformers;
import org.springframework.orm.hibernate3.HibernateCallback;

import com.sophossystems.client.asmon.dao.TipoZonaDao;
import com.sophossystems.client.asmon.dto.DelegacionDTO;
import com.sophossystems.client.asmon.dto.TipoZonaDTO;
import com.sophossystems.client.asmon.exceptions.DaoException;


public class TipoZonasDaoImpl extends AbstractDAO implements TipoZonaDao {
	
	private static Logger logger = Logger.getLogger(TipoZonasDaoImpl.class);

	@SuppressWarnings("unchecked")
	@Override
	public TipoZonaDTO findById(final int idZona) throws DaoException {
		TipoZonaDTO exito = null;
		try {
			exito = (TipoZonaDTO) getHibernateTemplate().execute(new HibernateCallback() {
				
				@Override
				public Object doInHibernate(Session session) throws HibernateException,
						SQLException {
					final Query oQuery = session.createQuery("SELECT t.idZona as idZona, t.nombreZona as nombreZona" +
						" FROM " + getTableName() + " t WHERE  t.idZona = :idZona");
					oQuery.setInteger("idZona", idZona);
					TipoZonaDTO tipoZonas = (TipoZonaDTO) oQuery.setResultTransformer(Transformers.aliasToBean(TipoZonaDTO.class))
							.list().get(0);
					return tipoZonas;
				}
			});
		} catch (Exception e) {
			logger.debug("Error SELECT tipoZonas, causa: " + e.getCause());
			throw new DaoException("Error SELECT TipoZona, causa: " + e.getCause());
		}
				
		return exito;
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<TipoZonaDTO> findAll() throws DaoException {
		List<TipoZonaDTO> exito = null;
		try {
			exito = (List<TipoZonaDTO>) getHibernateTemplate().execute(new HibernateCallback() {
				
				@Override
				public Object doInHibernate(Session session) throws HibernateException,
						SQLException {
					final Query oQuery = session.createQuery("SELECT t.idZona as idZona, t.nombreZona as" +
							" nombreZona, t.idMensajero as idMensajero FROM " + getTableName()
							+ " t");
					List<TipoZonaDTO> tipoZonasDto = oQuery.setResultTransformer(Transformers.aliasToBean(
							TipoZonaDTO.class)).list();
					return tipoZonasDto;
				}
			});
			
		} catch (Exception e) {
			logger.error("Error findAll TipoZonas, causa: " + e.getCause());
			throw new DaoException("Error findAll TipoZonas, causa: " + e.getCause());
		}
		return exito;
	}
	
	public String getTableName() {
		return "TipoZona";
	} 

}
